package com.pai4j.jianlipai.service.jianlibot.templates;

import com.pai4j.domain.dto.jianlipai.BaseResume;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 *  抽象的模板服务
 *
 * @author: CYM-pai
 * @date: 2025/05/06 12:34
 **/
public abstract class AbstractTemplateService <T extends BaseResume> {
    // 设置模板代码的属性
    private String templateCode;
    
    /**
     * 设置模板代码的方法
     * @param templateCode 模板代码字符串
     */
    public void setTemplateCode(String templateCode) {
        this.templateCode = templateCode;
    }
    
    /**
     * 解析JSON的抽象方法
     * 需要在子类中实现具体逻辑
     * @param html 输入的HTML字符串
     * @return 解析后的JSON对象
     */
    public abstract T parseJson(String html);
    
    /**
     * 解析内容的抽象方法
     * 需要在子类中实现具体逻辑
     * @param t 解析后的JSON对象
     * @return 解析出的内容字符串
     */
    public abstract String parseContent(T t);
    
    /**
     * 获取简历JSON模板的抽象方法
     * 需要在子类中实现具体逻辑
     * @return 简历JSON模板字符串
     */
    public abstract String getJianLiJsonTemplate();
    
    /**
     * 解析HTML的抽象方法
     * 需要在子类中实现具体逻辑
     * @param t 解析后的JSON对象
     * @return 解析出的HTML字符串
     */
    public abstract String parseHtml(T t);
    
    /**
     * 根据类名获取文本内容的方法
     * @param elem 要解析的元素对象
     * @param className CSS类名
     * @return 匹配类名的元素文本，如果没有找到则返回空字符串
     */
    public String getTextByClass(Element elem, String className) {
        if (elem == null || StringUtils.isBlank(className)) {
            return "";
        }
        Elements companyTimes = elem.getElementsByClass(className);
        return companyTimes != null && companyTimes.size() > 0 ? companyTimes.get(0).text() : "";
    }
    
    /**
     * 根据ID获取文本内容的方法
     * @param elem 要解析的元素对象
     * @param idName 元素的ID
     * @return 匹配ID的元素文本，如果没有找到则返回空字符串
     */
    public String getTextById(Element elem, String idName) {
        if (elem == null || StringUtils.isBlank(idName)) {
            return "";
        }
        Element element = elem.getElementById(idName);
        return element != null ? element.text() : "";
    }
    
    /**
     * 获取默认字符串的方法
     * 当输入对象为空或空白时返回默认值
     * @param obj 输入的字符串对象
     * @param defaultValue 默认值
     * @return 默认字符串
     */
    public String getDefaultString(String obj, String defaultValue) {
        return StringUtils.isBlank(obj) ? defaultValue : obj;
    }
}
